﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//using DAO;
using System.Collections;
using DTO;
using BUS;


namespace QuanLyNhaSach_1173005
{
    public partial class frmPhieuNhapSach : Form
    {
        PhieuNhapDTO pn;
        public frmPhieuNhapSach()
        {
            InitializeComponent();
            //Load du lieu ngay he thong
            dtp_NgayNhap.Value = DateTime.Now;
            //Load dữ liệu sách vào combobox
            this.MaSach.DataSource = SachBUS.LayDanhSach();
            this.MaSach.DisplayMember = "MaSach";
            this.MaSach.ValueMember = "MaSach";

            //Phiếu nhập hiẹn đang sử dụng
            pn = new PhieuNhapDTO();
        }

        //Hàm kiểm tra lỗi
        //Kiểm tra còn lỗi ko
        public void KTLoi()
        {
            //MessageBox.Show(dtgv_HienThiSach.Rows.Count.ToString());
            int flag = 1;
            for (int i = 0; i < dtgv_HienThiSach.Rows.Count; i++)
            {
                if (dtgv_HienThiSach.Rows[i].DefaultCellStyle.BackColor == Color.IndianRed
                    || dtgv_HienThiSach.Rows[i].DefaultCellStyle.BackColor == Color.Yellow)
                    flag = 0;
            }
            if (dtgv_HienThiSach.Rows.Count == 1)
                flag = 0;
            if (flag == 1)
            {
                if (btn_CapNgat.Enabled == false && btn_XoaPhieu.Enabled == false)
                    btn_LapPhieu.Enabled = true;
                if (btn_LapPhieu.Enabled == false)
                    btn_CapNgat.Enabled = true;
            }
            else
            {
                btn_LapPhieu.Enabled = false;
                btn_CapNgat.Enabled = false;
            }
        }

        private void btn_LapPhieu_Click(object sender, EventArgs e)
        {
            // Thêm phiếu nhập
            pn = new PhieuNhapDTO();
            pn.MaPhieuNhap = "PN" + DateTime.Now.Ticks;
            pn.NgayNhap = dtp_NgayNhap.Value;
            pn.TrangThai = 1;
            PhieuNhapBUS.ThemPhieuNhap(pn);

            // Thêm chi tiết phiếu nhập
            for (int i = 0; i < dtgv_HienThiSach.RowCount - 1; i++)
            {
                ChiTietPhieuNhapDTO ctpn = new ChiTietPhieuNhapDTO();
                ctpn.PhieuNhap = pn;
                ctpn.MaChiTietPhieuNhap = "CTPN" + DateTime.Now.Ticks;
                SachDTO sach = SachBUS.LayThongTinSach(dtgv_HienThiSach.Rows[i].Cells[1].Value.ToString());
                ctpn.Sach = sach;
                ctpn.SoLuongNhap = Convert.ToInt32(dtgv_HienThiSach.Rows[i].Cells[6].Value);
                ctpn.TrangThai = 1;
                ChiTietPhieuNhapBUS.ThemChiTietPhieuNhap(ctpn);
                //Cập nhật idctpn vào grid
                dtgv_HienThiSach.Rows[i].Cells[7].Value = ctpn;
                // Cập nhật số lượng tồn mới của khách
                SachBUS.CapNhatSoLuongTon(sach.MaSach, (sach.SoLuongTon + ctpn.SoLuongNhap));
            }

            MessageBox.Show("Phiếu nhập được nhập thành công", "Quản lý nhà sách");
            btn_LapPhieu.Enabled = false;
            btn_CapNgat.Enabled = true;
            btn_XoaPhieu.Enabled = true;
            //Chỉ cho fép sửa số lượng nhập và xóa
            for (int i = 0; i < dtgv_HienThiSach.RowCount - 1; i++)
            {
                dtgv_HienThiSach.Rows[i].Cells[1].ReadOnly = true;
            }
        }

        private void dtgv_HienThiSach_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 1 && e.RowIndex >= 0)
            {
                int stt = e.RowIndex;
                if (dtgv_HienThiSach.Rows[e.RowIndex].Cells[1].Value != null)
                {
                    String maSach = dtgv_HienThiSach.Rows[e.RowIndex].Cells[1].Value.ToString();
                    //MessageBox.Show(maSach);

                    SachDTO sach = SachBUS.LayThongTinSach(maSach);
                    //SachDTO s = SachBUS.LayThongTinSach(maSach);


                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[0].Value = ++stt;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[2].Value = sach.TenSach;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[3].Value = sach.TheLoai;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[4].Value = sach.TacGia;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[5].Value = sach.SoLuongTon;
                    dtgv_HienThiSach.Rows[e.RowIndex].Cells[6].Value = "<Số lượng nhập>";

                    //Lấy số lượng tồn qui định
                    int slton = ThamSoBUS.LayThongTinThamSo().SoLuongTonQuiDinh;

                    //Tô màu và ko cho nhập đầu sách có tồn ít hơn số lượng tồn qui định
                    if (sach.SoLuongTon >= slton)
                    {
                        dtgv_HienThiSach.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.IndianRed;
                        dtgv_HienThiSach.Rows[e.RowIndex].Cells[6].ReadOnly = true;
                        dtgv_HienThiSach.Rows[e.RowIndex].Cells[6].ToolTipText = "Số lượng tồn của đầu sách này lớn hơn bằng " + slton + " nên không thể nhập thêm";
                        MessageBox.Show("Đầu sách bạn vừa chọn còn trên " + slton + " cuốn, không thể nhập thêm nữa. Vui lòng chọn đầu sách khác!!!");
                    }
                    else
                    {
                        dtgv_HienThiSach.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
                        dtgv_HienThiSach.Rows[e.RowIndex].Cells[6].ReadOnly = false;
                        dtgv_HienThiSach.Rows[e.RowIndex].Cells[6].ToolTipText = "Nhập số lượng sách muốn nhập cho đầu sách này";
                    }

                }
            }
            else if (e.ColumnIndex == 6 && e.RowIndex >= 0)
            {
                try
                {
                    int soLuongNhap = Int32.Parse(dtgv_HienThiSach.Rows[e.RowIndex].Cells[6].Value.ToString());
                    int slNhapToiThieu = ThamSoBUS.LayThongTinThamSo().SoLuongNhaptoiThieu;
                    if (soLuongNhap < slNhapToiThieu)
                    {
                        dtgv_HienThiSach.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
                        MessageBox.Show("Số lượng nhập tối thiểu phải là " + slNhapToiThieu + " cuốn. Mời bạn nhập lại !!!");
                    }
                    else
                    {
                        dtgv_HienThiSach.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;

                    }
                }
                catch (FormatException fex)
                {
                    MessageBox.Show("Nhập không đúng định dạng");
                }

            }
            KTLoi();

        }

        private void btn_PhieuMoi_Click(object sender, EventArgs e)
        {
            pn = new PhieuNhapDTO();
            btn_CapNgat.Enabled = false;
            btn_XoaPhieu.Enabled = false;
            dtgv_HienThiSach.Rows.Clear();
            KTLoi();
        }

        private void btn_CapNgat_Click(object sender, EventArgs e)
        {
            pn.NgayNhap = dtp_NgayNhap.Value;
            PhieuNhapBUS.CapNhat(pn);
            // Sửa chi tiết phiếu nhập
            for (int i = 0; i < dtgv_HienThiSach.RowCount - 1; i++)
            {
                //Trường hợp cập nhật
                if (dtgv_HienThiSach.Rows[i].Cells[7].Value != null)
                {
                    //Cập nhật số lượng nhập mới
                    ChiTietPhieuNhapDTO ctpn = (ChiTietPhieuNhapDTO)dtgv_HienThiSach.Rows[i].Cells[7].Value;
                    //Lây so lượng nhập cũ
                    int slNhapCu = ctpn.SoLuongNhap;
                    ctpn.SoLuongNhap = Convert.ToInt32(dtgv_HienThiSach.Rows[i].Cells[6].Value);
                    ChiTietPhieuNhapBUS.CapNhat(ctpn);
                    //Cập nhật idctpn vào grid
                    dtgv_HienThiSach.Rows[i].Cells[7].Value = ctpn;

                    // Cập nhật số lượng tồn mới của khách
                    SachDTO sach = SachBUS.LayThongTinSach(ctpn.Sach.MaSach);
                    SachBUS.CapNhatSoLuongTon(sach.MaSach, (sach.SoLuongTon + (ctpn.SoLuongNhap - slNhapCu)));

                }
                else //Trường hợp thêm chi tiết phiếu nhập
                {
                    ChiTietPhieuNhapDTO ctpn = new ChiTietPhieuNhapDTO();
                    ctpn.PhieuNhap = pn;
                    ctpn.MaChiTietPhieuNhap = "CTPN" + DateTime.Now.Ticks;
                    SachDTO sach = SachBUS.LayThongTinSach(dtgv_HienThiSach.Rows[i].Cells[1].Value.ToString());
                    ctpn.Sach = sach;
                    ctpn.SoLuongNhap = Convert.ToInt32(dtgv_HienThiSach.Rows[i].Cells[6].Value);
                    ChiTietPhieuNhapBUS.ThemChiTietPhieuNhap(ctpn);
                    //Cập nhật idctpn vào grid
                    dtgv_HienThiSach.Rows[i].Cells[7].Value = ctpn;
                    // Cập nhật số lượng tồn mới của khách
                    SachBUS.CapNhatSoLuongTon(sach.MaSach, (sach.SoLuongTon + ctpn.SoLuongNhap));
                }

            }
            MessageBox.Show("Cập nhật thành công", "Quản lý nhà sách");
        }

        private void btn_XoaPhieu_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có thật sự muốn xóa?", "Quản lý nhà sách", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                // Xóa chi tiết phiếu nhập
                for (int i = 0; i < dtgv_HienThiSach.RowCount - 1; i++)
                {
                    //Trường hợp đã insert vào csdl
                    if (dtgv_HienThiSach.Rows[i].Cells[7].Value != null)
                    {
                        //Cập nhật số lượng nhập mới
                        ChiTietPhieuNhapDTO ctpn = (ChiTietPhieuNhapDTO)dtgv_HienThiSach.Rows[i].Cells[7].Value;
                        //Lây so lượng nhập cũ
                        int slNhapCu = ctpn.SoLuongNhap;

                        // Cập nhật số lượng tồn mới của sách
                        SachDTO sach = SachBUS.LayThongTinSach(ctpn.Sach.MaSach);

                        //Xóa chi tiết phiếu nhập
                        ChiTietPhieuNhapBUS.Xoa(ctpn.MaChiTietPhieuNhap);
                        SachBUS.CapNhatSoLuongTon(sach.MaSach, (sach.SoLuongTon - slNhapCu));

                    }
                    //else //Trường hợp chưa được lưu xuống csdl
                    //{
                    //}
                }
                dtgv_HienThiSach.Rows.Clear();
                PhieuNhapBUS.Xoa(pn.MaPhieuNhap);
                MessageBox.Show("Xóa phiếu nhập thành công", "Quản lý nhà sách");
                btn_XoaPhieu.Enabled = false;
                btn_CapNgat.Enabled = false;
                KTLoi();
            }
        }

        private void btn_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
